Revision: arnesi--dev--1.2--patch-51
Archive: bese-2004@common-lisp.net
Creator: Marco Baringer <mb@bese.it>
Date: Wed Feb 23 12:39:33 CET 2005
Standard-date: 2005-02-23 11:39:33 GMT
Modified-files: src/cps.lisp t/cps.lisp
New-patches: bese-2004@common-lisp.net/arnesi--dev--1.2--patch-51
Summary: Fix bug in CPS transformation of LET*
Keywords: 

With forms like this:

(let* ((a (call/cc ...))
       (b a)
       (c b))
  ...)

We were assuming that after transforming it to this:

(funcall ... (lambda (a)
               (let* ((b a)
                      (c b))
                 ...)))

we could treat LET* a LET, which is generally correct but not in this
case (due to the fact that one of the variable initns is a call/cc
form). This bug was caught by a ucw action using (push (call/cc ...) ...)
and took a _long_ time to track time :(.

* t/cps.lisp (cps-let*): added test for let* with a variable
  initialization which requires uses call/cc.

* src/cps.lisp (cps-requires let): Just changed the indentation.
  (cps-transformer let*): We can't simply transform as per let but must
  use let*

